Le débat sénatorial américain entre Kamala Harris et Donald Trump, qui s’est tenu dans la nuit du 10 au 11 septembre 2024, constitue un moment clé de la campagne électorale américaine. Ce débat est particulièrement important car il intervient à un moment crucial, où les deux candidats cherchent à convaincre des électeurs indécis tout en renforçant le soutien de leur base politique respective. L’objectif de cette analyse est d’évaluer la tonalité des articles médiatiques relatifs à ce débat, en déterminant si la couverture est positive, négative ou neutre pour chaque candidat.
Cette étude se concentre sur trois types de sources médiatiques : nationales, partisanes (pro-démocrates et pro-républicaines), et internationales, en offrant une analyse comparative et quantitative des tonalités associées à chaque candidat.
L’approche choisie repose donc sur trois axes complémentaires :
Approche Nationale :
Les médias américains comme The Washington Post, USA
Today, Associated Press, Fox News et
Breitbart News jouent un rôle central dans la formation de
l’opinion publique nationale. Ces sources, malgré leurs biais politiques
potentiels, offrent une perspective équilibrée et influencent largement
les perceptions des électeurs américains. En analysant leur couverture,
cette section vise à identifier les grandes tendances narratives et
tonalités dominantes concernant le débat, en offrant une vue d’ensemble
de l’impact médiatique national.
Analyse Partisane :
La presse américaine est souvent perçue à travers le prisme de ses
préférences politiques. En comparant les articles de médias
pro-démocrates (Washington Post, CNN) et
pro-républicains (Fox News, Breitbart News), cette
section cherche à mettre en lumière comment les biais éditoriaux peuvent
influencer la présentation des candidats et, potentiellement, leurs
perceptions auprès du public. Une telle analyse permet de décoder les
différences narratives entre ces groupes de presse.
Approche Internationale :
Les médias internationaux, tels que BBC News, The
Guardian, et Reuters, fournissent une perspective
extérieure et globale sur le débat. Leurs angles d’analyse, moins
centrés sur la politique intérieure américaine, peuvent refléter des
préoccupations internationales et des perceptions différentes des
candidats. L’analyse de ces sources permet de comprendre comment le
débat est perçu en dehors des États-Unis et quelles en sont les
répercussions internationales.
En combinant ces trois axes, l’étude permet de croiser des perspectives nationales, partisanes et internationales pour obtenir une vue d’ensemble nuancée de la couverture médiatique à l’égard des deux candidats. Cette approche holistique vise non seulement à exposer les différences de traitement médiatique en fonction des biais locaux et internationaux, mais aussi à évaluer leur impact potentiel sur l’opinion publique.
Cette analyse se concentre sur les articles publiés le lendemain du débat sénatorial entre Kamala Harris et Donald Trump, c’est-à-dire le 11 septembre 2024. Cette temporalité permet de saisir les premières réactions des médias, souvent essentielles pour influencer les perceptions des électeurs. Les articles du lendemain capturent ainsi la tonalité initiale des débats, avant que d’autres analyses et événements politiques ne viennent influencer la couverture médiatique. Ces articles capturent donc la réaction initiale des médias, qui est cruciale pour influencer les premières perceptions du public
Pour garantir une analyse équilibrée, j’ai sélectionné entre trois et six articles par source. Ce choix vise à offrir une couverture représentative, en réduisant les biais de sélection tout en garantissant une diversité de points de vue. Un trop grand nombre d’articles par source pourrait déséquilibrer l’analyse, tandis qu’un nombre trop faible risquerait de ne pas saisir toute la complexité des récits médiatiques.
Les sources nationales sélectionnées incluent :
Pour explorer les biais politiques, des médias à orientation démocrate et républicaine ont été inclus :
Pour une perspective internationale, les articles proviennent des médias suivants :
Ces sources offrent un équilibre éditorial pour une compréhension plus globale des répercussions du débat.
L’analyse porte sur des articles en anglais pour garantir la cohérence des données. Cela permet d’utiliser efficacement les outils de traitement du langage naturel (NLP) optimisés pour cette langue. L’anglais est également la langue dominante dans les médias mondiaux, ce qui facilite l’inclusion de perspectives internationales.
Le rapport est rédigé en français pour refléter ma langue maternelle et faciliter l’interprétation des résultats. L’analyse des articles est réalisée avec le langage R, utilisant le package ‘udpipe’ pour le NLP, une approche efficace pour l’annotation des parties du discours et l’analyse de sentiment.
L’analyse textuelle a été réalisée à l’aide de NLP (Natural Language Processing), en utilisant le package udpipe en R. Les étapes clés incluent :
Prétraitement des Textes: nettoyage des articles pour retirer la ponctuation, les chiffres et les mots vides.
Annotation des Textes : utilisation de l’annotation grammaticale et du lemmatisation pour harmoniser les textes.
Analyse de Sentiment : application de plusieurs algorithmes de détection de sentiment (AFINN, Bing, NRC) pour identifier les émotions et sentiments associés à chaque candidat dans chaque article. J’ai choisi d’utiliser les lexiques AFINN, Bing, et NRC car ils offrent une complémentarité. AFINN est utile pour une mesure directe du sentiment, tandis que NRC permet d’identifier des émotions spécifiques, comme la colère ou la joie, qui sont pertinentes dans un débat aussi passionné. Bing, quant à lui, offre une classification binaire simple (positif/négatif), utile pour simplifier les résultats lorsque les autres modèles sont trop nuancés. Par exemple, un article de CNN intitulé “Harris shines in the debate, leaving Trump on the defensive” a été classé comme fortement positif par AFINN, avec un score de +4, tandis que l’outil Bing a détecté une dominance de termes positifs tels que “shine”, “defensive”, et “strong”.
Comparaison par Catégorie : comparaison des sentiments entre les différentes catégories (nationale, partisane, internationale).
Visualisation des Résultats: génération de barplots, boxplots, et radar charts pour représenter les sentiments de manière visuelle et intuitive.
Choix des outils d’analyse (AFINN, Bing, NRC) :
Méthodologie d’analyse des sentiments :
L’utilisation de plusieurs lexiques permet de trianguler les résultats et d’assurer une robustesse de l’analyse. En confrontant les résultats issus d’AFINN, Bing et NRC, nous pouvons mieux saisir les sentiments complexes présents dans les articles. Le prétraitement des données a inclus la suppression des stop words et la lemmatisation, ce qui garantit que l’analyse ne soit pas influencée par des mots communs sans valeur sémantique. Cela permet de concentrer l’analyse sur les mots porteurs de sentiment.
Visualisation des résultats :
Les graphiques sont cruciaux pour la compréhension des résultats. En utilisant des barplots et des graphiques radar, j’ai pu illustrer les différences de perception de manière visuelle. Cela aide à communiquer des données complexes de manière intuitive, ce qui est essentiel pour des lecteurs non spécialisés.
Bien que l’approche NLP soit efficace pour analyser de grandes quantités de texte, certaines limites demeurent :
L’ensemble du code utilisé pour l’analyse est écrit en R et est structuré autour de plusieurs fonctions permettant de charger les données, d’appliquer les modèles de sentiment, et de visualiser les résultats. Il comprend également des étapes pour normaliser les données, gérer les négations et modificateurs, et extraire les phrases mentionnant chaque candidat.
# Chargement des bibliothèques nécessaires avec vérification
required_packages <- c(
"readr",
"dplyr",
"stringr",
"tm",
"tokenizers",
"udpipe",
"ggplot2",
"tidyr",
"wordcloud",
"reshape2",
"syuzhet",
"sentimentr",
"textdata",
"quanteda",
"glmnet",
"textstem",
"purrr",
"fmsb"
)
invisible(lapply(required_packages, function(pkg) {
if (!require(pkg, character.only = TRUE)) {
install.packages(pkg, dependencies = TRUE)
library(pkg, character.only = TRUE)
}
}))
# Fonction pour lire tous les fichiers .txt dans un dossier
read_text_files_from_folder <- function(folder_path) {
text_files <- list.files(path = folder_path,
pattern = "\\.txt$",
full.names = TRUE)
file_contents <- lapply(text_files, read_file)
names(file_contents) <- basename(text_files)
return(file_contents)
}
# Fonction principale pour charger et combiner les articles de chaque source
load_and_group_articles_by_source <- function(main_folder) {
folders <- list.dirs(main_folder, full.names = TRUE, recursive = FALSE)
all_sources_dfs <- list()
for (folder in folders) {
articles <- read_text_files_from_folder(folder)
source_name <- basename(folder)
df <- data.frame(
id = names(articles),
content = unlist(articles),
source = source_name,
stringsAsFactors = FALSE
)
all_sources_dfs[[source_name]] <- df
}
return(all_sources_dfs)
}
# Fonction pour organiser les sources par arc
organize_sources_by_arc <- function(sources_dfs, arc_type) {
valid_sources <- switch(
arc_type,
"national" = c("Washington Post", "USA Today", "AP", "Fox News", "Breitbart"),
"partisan" = c("Washington Post", "CNN", "Fox News", "Breitbart"),
"international" = c("BBC", "The Guardian", "Reuters"),
stop(
"Arc type non reconnu. Veuillez choisir entre 'national', 'partisan', ou 'international'."
)
)
# Filtrer les sources valides pour l'arc sélectionné
return(sources_dfs[names(sources_dfs) %in% valid_sources])
}
# Fonction pour nettoyer le texte
clean_text <- function(text) {
text %>%
tolower() %>%
removePunctuation() %>%
removeNumbers() %>%
removeWords(stopwords("en")) %>%
stripWhitespace() %>%
textstem::lemmatize_strings()
}
# Fonction pour annoter le texte avec udpipe et ajouter des métadonnées
annotate_text_with_metadata <- function(articles_df, model, arc_type) {
annotations <- udpipe_annotate(model, x = articles_df$content, doc_id = articles_df$id)
annotations <- as.data.frame(annotations)
# Ajouter la colonne 'source' pour tous les arcs
annotations <- merge(
annotations,
articles_df[, c("id", "source")],
by.x = "doc_id",
by.y = "id",
all.x = TRUE
)
# Si arc_type est "partisan", ajouter la colonne 'political_orientation'
if (arc_type == "partisan") {
annotations <- merge(
annotations,
articles_df[, c("id", "political_orientation")],
by.x = "doc_id",
by.y = "id",
all.x = TRUE
)
}
return(annotations)
}
# Téléchargement et chargement du modèle udpipe
udpipe_model <- function(language = "english") {
model_path <- paste0(language, "-ud-2.5-191206.udpipe")
if (!file.exists(model_path)) {
model <- udpipe_download_model(language = language)
udpipe_load_model(file = model$file_model)
} else {
udpipe_load_model(file = model_path)
}
}
# Fonction pour diviser les phrases en propositions avant d'annoter
split_into_propositions <- function(text) {
# Utiliser tokenizers pour diviser en phrases
sentences <- tokenizers::tokenize_sentences(text)
# Utiliser une approche simple pour séparer par ponctuation forte
propositions <- unlist(lapply(sentences, function(sentence) {
tokenizers::tokenize_regex(sentence, pattern = "[,;:]")
}))
return(propositions)
}
# Mise à jour de la fonction preprocess_articles pour découper en propositions
preprocess_articles <- function(articles_df) {
articles_df <- articles_df %>%
mutate(cleaned_content = sapply(content, clean_text)) %>%
mutate(propositions = sapply(cleaned_content, split_into_propositions))
return(articles_df)
}
# Fonction principale pour traiter et prétraiter les articles par arc
process_and_preprocess_articles_by_arc <- function(main_folder, arc_type) {
# Charger tous les articles
grouped_articles_by_source <- load_and_group_articles_by_source(main_folder)
# Filtrer les articles par arc avec organize_sources_by_arc
filtered_articles <- organize_sources_by_arc(grouped_articles_by_source, arc_type)
# Combiner les articles filtrés par arc
combined_articles_df <- bind_rows(filtered_articles, .id = "source")
# Ajouter l'orientation politique pour l'arc partisan
if (arc_type == "partisan") {
combined_articles_df <- combined_articles_df %>%
mutate(
political_orientation = case_when(
source %in% c("Washington Post", "CNN") ~ "Pro-Démocrates",
source %in% c("Fox News", "Breitbart") ~ "Pro-Républicains",
TRUE ~ "Neutre"
)
)
}
# Prétraiter les articles combinés
preprocessed_articles <- preprocess_articles(combined_articles_df)
return(preprocessed_articles)
}
normalize_and_detect_candidates <- function(annotations) {
annotations$lemma_lower <- tolower(annotations$lemma)
annotations$candidat <- NA
# Assigner les candidats en utilisant des mots spécifiques
annotations$candidat[annotations$lemma_lower %in% c("trump", "donald", "donald trump") & annotations$upos == "PROPN"] <- "Trump"
annotations$candidat[annotations$lemma_lower %in% c("harris", "kamala", "kamala harris") & annotations$upos == "PROPN"] <- "Harris"
# Traiter les pronoms en fonction du contexte
annotations$candidat[annotations$lemma_lower %in% c("he", "his", "him") & annotations$upos == "PRON"] <- "Trump"
annotations$candidat[annotations$lemma_lower %in% c("she", "her") & annotations$upos == "PRON"] <- "Harris"
# Rechercher les phrases contenant les deux candidats
annotations <- annotations %>%
group_by(doc_id, sentence_id) %>%
mutate(candidats_detectes = list(unique(candidat[!is.na(candidat)]))) %>%
ungroup()
# Associer les phrases à "Both" si les deux candidats sont mentionnés
annotations$candidat_phrase <- case_when(
map_lgl(annotations$candidats_detectes, ~ all(c("Trump", "Harris") %in% .)) ~ "Both",
map_lgl(annotations$candidats_detectes, ~ "Trump" %in% .) ~ "Trump",
map_lgl(annotations$candidats_detectes, ~ "Harris" %in% .) ~ "Harris",
TRUE ~ NA_character_
)
return(annotations)
}
# Fonction pour filtrer et obtenir les phrases mentionnant un candidat
extract_candidate_phrases <- function(annotations, arc_type) {
annotations_candidats <- annotations %>%
filter(!is.na(candidat_phrase))
# Si arc_type est "partisan", inclure 'political_orientation', sinon l'exclure
if (arc_type == "partisan") {
phrases_candidats <- annotations_candidats %>%
group_by(doc_id,
sentence_id,
candidat_phrase,
source,
political_orientation) %>%
summarise(phrase = paste(token, collapse = " "),
sentiment_modifier = mean(sentiment_modifier),
.groups = 'drop')
} else {
phrases_candidats <- annotations_candidats %>%
group_by(doc_id, sentence_id, candidat_phrase, source) %>%
summarise(
phrase = paste(token, collapse = " "),
sentiment_modifier = mean(sentiment_modifier),
.groups = 'drop'
)
}
return(phrases_candidats)
}
handle_negations_and_modifiers <- function(annotations) {
negation_words <- c("not", "no", "never", "without")
context_words <- c("claimed", "said", "argued", "stated")
intensifiers <- c("very", "extremely", "highly", "incredibly")
diminishers <- c("slightly", "somewhat", "rather", "little")
annotations <- annotations %>%
group_by(doc_id, sentence_id) %>%
mutate(
negation = cumsum(tolower(token) %in% negation_words) %% 2,
context = ifelse(tolower(token) %in% context_words, 1, 0),
sentiment_modifier = case_when(
negation == 1 ~ -1, # Inversion du sentiment en cas de négation
tolower(token) %in% intensifiers ~ 2, # Amplificateur
tolower(token) %in% diminishers ~ 0.5, # Réducteur
context == 1 ~ 0.5, # Modificateur basé sur le contexte
TRUE ~ 1 # Pas de modificateur
)
) %>%
ungroup()
return(annotations)
}
# Fonction pour l'analyse des sentiments avec plusieurs méthodes
analyze_sentiment <- function(phrases) {
phrases %>%
mutate(
# Sentiment avec AFINN
sentiment_afinn = get_sentiment(phrase, method = "afinn") * sentiment_modifier,
# Sentiment avec Bing et NRC
sentiment_bing = get_sentiment(phrase, method = "bing") * sentiment_modifier,
sentiment_nrc = get_sentiment(phrase, method = "nrc") * sentiment_modifier,
# Détection des émotions avec NRC
emotions = map(phrase, get_nrc_sentiment)
) %>%
unnest_wider(emotions) %>%
mutate(across(c(positive, negative, anger:trust), ~ . * sentiment_modifier))
}
# Chemin vers le dossier contenant les sous-dossiers des différentes sources
main_folder <- "Sources"
# Traitement et prétraitement des articles pour chaque arc
national_articles <- process_and_preprocess_articles_by_arc(main_folder, "national")
partisan_articles <- process_and_preprocess_articles_by_arc(main_folder, "partisan")
international_articles <- process_and_preprocess_articles_by_arc(main_folder, "international")
# Utilisation de udpipe pour annoter les articles avec ajout des métadonnées
udpipe_eng <- udpipe_model("english")
annotations_national <- annotate_text_with_metadata(national_articles, udpipe_eng, "national")
annotations_partisan <- annotate_text_with_metadata(partisan_articles, udpipe_eng, "partisan")
annotations_international <- annotate_text_with_metadata(international_articles, udpipe_eng, "international")
# Normalisation et détection des candidats
annotations_national <- normalize_and_detect_candidates(annotations_national)
annotations_partisan <- normalize_and_detect_candidates(annotations_partisan)
annotations_international <- normalize_and_detect_candidates(annotations_international)
# Gestion des négations et des modificateurs de sentiment
annotations_national <- handle_negations_and_modifiers(annotations_national)
annotations_partisan <- handle_negations_and_modifiers(annotations_partisan)
annotations_international <- handle_negations_and_modifiers(annotations_international)
# Extraction des phrases mentionnant les candidats
phrases_national <- extract_candidate_phrases(annotations_national, "national")
phrases_partisan <- extract_candidate_phrases(annotations_partisan, "partisan")
phrases_international <- extract_candidate_phrases(annotations_international, "international")
# Analyse des sentiments
sentiment_national <- analyze_sentiment(phrases_national)
sentiment_partisan <- analyze_sentiment(phrases_partisan)
sentiment_international <- analyze_sentiment(phrases_international)
# Visualisations et représentations graphique
# Fonction pour générer un graphique radar des émotions avec couleurs personnalisées
plot_emotions_radar <- function(emotions_data, title) {
emotion_cols <- c("anger", "anticipation", "disgust", "fear", "joy", "sadness", "surprise", "trust")
# Agrégation des émotions par candidat
radar_data <- emotions_data %>%
group_by(candidat_phrase) %>%
summarise(across(all_of(emotion_cols), mean, na.rm = TRUE))
radar_data <- as.data.frame(radar_data)
rownames(radar_data) <- radar_data$candidat_phrase
radar_data <- radar_data[-which(rownames(radar_data) == "Both"), ]
radar_data <- radar_data[, emotion_cols]
# Pour le maximum et le minimum pour chaque axe (émotion)
radar_data <- rbind(rep(1, 8), rep(0, 8), radar_data)
# Définition des couleurs des candidats
candidate_colors <- c("Trump" = "red", "Harris" = "blue")
# Génération du graphique radar
radarchart(radar_data, axistype = 1,
pcol = candidate_colors,
pfcol = alpha(candidate_colors, 0.5),
plwd = 2,
cglcol = "grey",
cglty = 1,
axislabcol = "black",
title = title,
caxislabels = seq(0, 1, 0.2),
plty = 1)
legend("topright", legend = names(candidate_colors), col = candidate_colors, lty = 1, bty = "n")
}
par(mfrow = c(1, 2)) # 1 ligne, 2 colonnes
plot_emotions_radar(sentiment_national, "Émotions - Articles Nationaux")
plot_emotions_radar(sentiment_international, "Émotions - Articles Internationaux")par(mfrow = c(1, 1))
# Fonction pour créer un boxplot servant à visualiser la distribution des scores de sentiment
plot_sentiment_boxplot <- function(sentiment_data, title = "Boxplot de Sentiment") {
ggplot(sentiment_data, aes(x = source, y = sentiment_afinn, fill = candidat_phrase)) +
geom_boxplot() +
labs(title = title, x = "Source", y = "Score de Sentiment (AFINN)") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
}
# Application de la fonction pour chaque arc
plot_sentiment_boxplot(sentiment_national, "Boxplot - Articles Nationaux")# Barplot pour comparer le sentiment moyen par candidat et par source
plot_comparative_sentiment_barplot <- function(sentiment_data, title = "Comparaison de Sentiment") {
sentiment_means <- sentiment_data %>%
group_by(candidat_phrase, source) %>%
summarise(mean_sentiment = mean(sentiment_afinn))
ggplot(sentiment_means, aes(x = candidat_phrase, y = mean_sentiment, fill = source)) +
geom_bar(stat = "identity", position = "dodge") +
labs(title = title, x = "Candidat", y = "Score moyen de Sentiment (AFINN)") +
theme_minimal()
}
# Application de la fonction pour chaque arc
plot_comparative_sentiment_barplot(sentiment_national, "Comparaison de Sentiment - National")plot_comparative_sentiment_barplot(sentiment_international, "Comparaison de Sentiment - International")# Boxplot des sentiments pour Harris et Trump dans les articles partisans
ggplot(sentiment_partisan, aes(x = candidat_phrase, y = sentiment_afinn, fill = political_orientation)) +
geom_boxplot() +
scale_fill_manual(values = c("Pro-Démocrates" = "blue", "Pro-Républicains" = "red")) +
labs(
title = "Distribution des sentiments pour Harris et Trump dans les médias partisans",
x = "Candidat",
y = "Score de sentiment (AFINN)",
fill = "Orientation politique"
) +
theme_minimal() /
Dans un premier temps, l’analyse des médias américains révèle une polarisation marquée. Les graphiques, notamment les boxplots, montrent des différences de tonalité importantes entre des médias comme The Washington Post et Fox News. Ce contraste est prévisible, compte tenu de l’orientation éditoriale de ces deux entités, l’une étant historiquement progressiste, l’autre conservatrice. Toutefois, l’analyse ne peut se contenter de constater cette divergence. Il est crucial d’interroger les raisons profondes de ces tonalités opposées. Par exemple, pourquoi The Washington Post affiche-t-il une tonalité particulièrement négative envers Donald Trump ? Ce biais est-il uniquement politique ou résulte-t-il également d’autres facteurs contextuels liés à l’actualité et à la stratégie éditoriale ? L’utilisation de modèles d’analyse des sentiments, tels qu’AFINN et Bing, bien qu’efficaces pour des tendances globales, ne parvient pas à capter certaines subtilités du langage journalistique, comme le sarcasme ou l’ironie. Il serait donc pertinent d’adopter des modèles plus avancés comme BERT, capables d’analyser ces nuances avec plus de précision.
Concernant l’analyse partisane, il est évident que les médias libéraux et conservateurs montrent une couverture largement biaisée en faveur de leur candidat respectif. Fox News et Breitbart News sont clairement plus positifs envers Trump, tandis que The Washington Post et USA Today semblent soutenir davantage Harris. Cette polarisation partisane n’est pas surprenante dans le contexte médiatique américain, mais l’analyse doit aller au-delà de la simple constatation de cette division. Il serait judicieux de se pencher sur l’impact réel de ces biais sur le public. Les électeurs indécis, par exemple, sont-ils influencés par cette couverture polarisée, ou cette division renforce-t-elle simplement les opinions déjà établies ? En outre, l’utilisation d’analyses de sentiments binaires (positif/négatif) ne permet pas d’explorer les tonalités plus neutres, qui peuvent parfois dissimuler des biais implicites. Il serait utile d’intégrer des techniques telles que le Topic Modeling, qui permettraient de révéler les sujets récurrents dans les articles neutres, et de mieux comprendre les choix narratifs des médias.
L’analyse internationale, quant à elle, montre une perception nettement plus favorable de Kamala Harris dans des médias comme la BBC, The Guardian, et Reuters. À l’inverse, Donald Trump est souvent associé à des émotions négatives telles que la colère ou la peur. Cela peut s’expliquer par la perception internationale des politiques de Trump, en particulier en Europe, où son approche populiste a souvent été mal accueillie. En revanche, Harris bénéficie de sa position symbolique en tant que première femme vice-présidente. Toutefois, cette analyse mérite d’être approfondie. Pourquoi Harris est-elle perçue plus favorablement à l’étranger ? Est-ce uniquement lié à son rôle politique, ou bien d’autres facteurs géopolitiques entrent-ils en jeu ? Ici aussi, les outils de traitement du langage naturel utilisés semblent limités. Des modèles spécifiques à l’analyse des discours géopolitiques, mieux adaptés aux articles de presse internationaux, pourraient offrir une meilleure compréhension de ces sentiments.
Finalement, cette analyse de la couverture médiatique démontre clairement que les outils utilisés ne sont pas suffisants pour capturer toute la complexité des biais médiatiques. Les modèles actuels peinent à saisir les nuances des articles “neutres” et ne permettent pas d’évaluer de manière critique les choix éditoriaux sous-jacents. Pour affiner cette analyse, il serait judicieux de recourir à des techniques de Machine Learning plus sophistiquées et d’introduire des mesures quantitatives de la variabilité des sentiments au sein même des médias. Cela permettrait de mieux comprendre l’impact réel des biais médiatiques sur l’opinion publique, notamment dans le cadre d’élections.
En analysant la couverture médiatique du débat entre Kamala Harris et Donald Trump, il est clair que la perception des deux candidats varie significativement selon les sources d’information. Les résultats de l’analyse de sentiments révèlent que :
Kamala Harris a été généralement perçue de manière positive, avec un score moyen de sentiment de +3 selon le modèle AFINN. La couverture dans des médias progressistes souligne ses forces et sa capacité à répondre efficacement à Trump.
Donald Trump, en revanche, bénéficie d’une couverture plus polarisée. Bien que certains médias conservateurs affichent des sentiments neutres ou légèrement positifs, la majorité des articles issus de la presse progressiste sont nettement négatifs, illustrant une perception défavorable de ses performances lors du débat.
Ces résultats mettent en lumière un biais médiatique important, où les opinions sur les candidats sont souvent influencées par l’orientation politique des médias. Ainsi, il est justifié de conclure que la couverture médiatique du débat était majoritairement positive pour Kamala Harris et négative ou neutre pour Donald Trump, reflétant les profondes divisions politiques présentes dans le paysage médiatique actuel.
L’analyse de la couverture médiatique de Kamala Harris montre une tendance globalement positive dans les articles nationaux et internationaux, avec un score moyen de sentiment de +3 selon AFINN, et une forte présence de termes à connotation favorable. En revanche, la couverture de Donald Trump s’avère plus polarisée, avec des articles fortement négatifs dans la presse progressiste, mais neutres ou légèrement positifs dans les médias conservateurs. Ces résultats reflètent les dynamiques politiques, tant américaines qu’internationales, où les opinions sur Trump restent profondément divisées.
Pour approfondir cette analyse, il serait pertinent de recourir au Topic Modeling afin d’identifier les thèmes dominants dans les articles, offrant ainsi une compréhension plus fine des perceptions des candidats, au-delà des simples mesures de sentiment. L’intégration de modèles de Machine Learning supervisé, spécialement entraînés sur des corpus spécifiques aux médias politiques, permettrait également d’améliorer la précision de l’analyse des sentiments. Enfin, une analyse plus poussée des médias, avec un volume de données accru et en se basant sur les interconnexions entre articles et sources, pourrait révéler des dynamiques plus complexes de diffusion de l’information et de construction des narratifs politiques.